﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Grafica.ClienteWS;

namespace Grafica
{
    public partial class ABMCoche : Form
    {
        private static ABMCoche InstanciaFormulario = null;
    
        public ABMCoche()
        {
            InitializeComponent();
            CargarCoches();            
        }

        public static ABMCoche Instance()
        {
            if (InstanciaFormulario == null)
            {
                InstanciaFormulario = new ABMCoche();
                
            }
            return InstanciaFormulario;
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);

            InstanciaFormulario = null;
        }

        private void buttonAgregar_Click(object sender, EventArgs e)
        {
            #region Validacion de campos

            //valido la matricula
            if (string.IsNullOrEmpty(textBoxMatricula.Text))
            {
                errorProvider1.SetError(textBoxMatricula, "Debe ingresar una matrícula.");
            }
            else 
            { 
                errorProvider1.SetError(textBoxMatricula, String.Empty); 
            }

            //valido los kilometros
            if (string.IsNullOrEmpty(textBoxKms.Text))
            {
                errorProvider1.SetError(textBoxKms, "Debe ingresar los kilómetros.");
            }
            else
            {
                errorProvider1.SetError(textBoxKms, String.Empty);
            }
            #endregion

            if (!string.IsNullOrEmpty(textBoxMatricula.Text) || !string.IsNullOrEmpty(textBoxKms.Text))
            {
                EtaxiSoapClient ws = new EtaxiSoapClient();
                DataCoche dataCoche = new DataCoche();
                dataCoche.Matricula = textBoxMatricula.Text;
                dataCoche.Marca = textBoxMarca.Text;
                dataCoche.Modelo = textBoxModelo.Text;
                dataCoche.Kms = Convert.ToInt32(textBoxKms.Text);

                if (!ws.AltaCoche(dataCoche))
                {
                    MessageBox.Show("La matricula ya existe", "Error al ingresar coche", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
                else
                {
                    MessageBox.Show("Se ha ingresado el nuevo coche", "Coche ingresado correctamente", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    dataGridViewCoches.Rows.Clear();
                    CargarCoches();
                    LimpiarDatos();
                }
            }
        }

        private void buttonModificar_Click_1(object sender, EventArgs e)
        {
            #region Validacion de campos

            //valido la matricula
            if (string.IsNullOrEmpty(textBoxMatricula.Text))
            {
                errorProvider1.SetError(textBoxMatricula, "Debe ingresar una matrícula.");
            }
            else
            {
                errorProvider1.SetError(textBoxMatricula, String.Empty);
            }

            //valido los kilometros
            if (string.IsNullOrEmpty(textBoxKms.Text))
            {
                errorProvider1.SetError(textBoxKms, "Debe ingresar los kilómetros.");
            }
            else
            {
                errorProvider1.SetError(textBoxKms, String.Empty);
            }
            #endregion


            if (!string.IsNullOrEmpty(textBoxMatricula.Text) || !string.IsNullOrEmpty(textBoxKms.Text))
            {
                EtaxiSoapClient ws = new EtaxiSoapClient();
                DataCoche dataCoche = new DataCoche();
                dataCoche.Matricula = textBoxMatricula.Text;
                dataCoche.Marca = textBoxMarca.Text;
                dataCoche.Modelo = textBoxModelo.Text;
                dataCoche.Kms = Convert.ToInt32(textBoxKms.Text);

                if (!ws.ModificarCoche(dataCoche))
                {
                    MessageBox.Show("No se ha podido modificar el coche", "Error al modificar coche", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
                else
                {
                    MessageBox.Show("Se ha modificado el coche", "Coche modificado correctamente", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    dataGridViewCoches.Rows.Clear();
                    CargarCoches();
                    LimpiarDatos();
                    textBoxMatricula.Enabled = true;
                }
            }        
        }

        private void buttonEliminar_Click(object sender, EventArgs e)
        {

            if (string.IsNullOrEmpty(textBoxMatricula.Text))
            {
                errorProvider1.SetError(textBoxMatricula, "Seleccione de la grilla el coche que desea eliminar.");
            }
            else
            {
                errorProvider1.SetError(textBoxMatricula, String.Empty);
                
                EtaxiSoapClient ws = new EtaxiSoapClient();
                DataCoche dataCoche = new DataCoche();
                dataCoche.Matricula = textBoxMatricula.Text;

                if (!ws.BajaCoche(dataCoche))
                {
                    MessageBox.Show("No se ha podido eliminar el coche", "Error al eliminar coche", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                } else
                {
                    MessageBox.Show("Se ha eliminado el coche", "Coche eliminado correctamente", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                    dataGridViewCoches.Rows.Clear();
                    CargarCoches();
                    LimpiarDatos();
                    textBoxMatricula.Enabled = true;
                }
            }
        }

        private void buttonSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void ABMCoche_KeyPress(object sender, KeyPressEventArgs e)
        {
            ValidarLetrasNumeros.ControlarNumeros(e);
        }

        private void dataGridViewCoches_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            LimpiarDatos();

            int nroFila = this.dataGridViewCoches.CurrentCell.RowIndex;
            textBoxMatricula.AppendText(this.dataGridViewCoches.Rows[nroFila].Cells[0].Value.ToString());
            textBoxMarca.AppendText(this.dataGridViewCoches.Rows[nroFila].Cells[1].Value.ToString());
            textBoxModelo.AppendText(this.dataGridViewCoches.Rows[nroFila].Cells[2].Value.ToString());
            textBoxKms.AppendText(this.dataGridViewCoches.Rows[nroFila].Cells[3].Value.ToString());

            textBoxMatricula.Enabled = false;
        }

        private void CargarCoches()
        {
            EtaxiSoapClient ws = new EtaxiSoapClient();
            DataCoche[] coches = ws.ListarCoches();

            foreach (DataCoche coche in coches)
            {
                this.dataGridViewCoches.Rows.Add(coche.Matricula, coche.Marca, coche.Modelo, coche.Kms);
            }
        }

        private void LimpiarDatos()
        {
            textBoxMatricula.Clear();
            textBoxMarca.Clear();
            textBoxModelo.Clear();
            textBoxKms.Clear();
        }
    }
}